#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QGraphicsScene>
#include <QLabel>
#include <QResizeEvent>
#include <QGraphicsItem>
#include <QDebug>
#include <QTime>
#include <QColorDialog>
#include <QFontDialog>
#include <QFontDialog>


#include "qwgraphicsview.h"

#include <QtCharts>
using namespace QtCharts;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);

    ~MainWindow();
private:
    void createChart(); // 创建图表的各个基本部分
    void prepareData(); // 更新序列的数据
    void updateFromChar(); // 从图表更新到界面

    void showAxisValue(QValueAxis* axis); // 将axis的内容展示到toolbox中

public slots:
    // 第一个工具栏
    void onSetTitleBtnClicked();  // 设置标题
    void onSetTitleFontBtnClicked(); // 设置标题字体
    // 图例显示方向
    void onLeftRadioBtnClicked();
    void onRightRadioBtnClicked();
    void onTopRadioBtnClicked();
    void onBottomRadioBtnClicked();
    void onLegendVisiableCheck(bool isChecked);
    void onBackgroundVisiableCheck(bool isChecked);
    void onLegendFontBtnClicked(); // 图例字体
    void onLegendColorBtnClicked(); // 图例颜色
    void onSetMarginBtnClicked(); // 设置边距

    // 第二个工具栏
    void onEllipseSinRadioBtnClicked(); // 序列sin被按下
    void onEllipseCosRadioBtnClicked(); // 序列cos被按下
    void onSetSeriesNameBtnClicked(); // 修改序列的名称
    void onSeriesVisiableChecked(bool isChecked); // 设置序列是否可见
    void onSeriesDataPointVisiableChecked(bool isChecked); // 设置序列的数据点是否可见
    void onDataPointLabVisiableChecked(bool isChecked);
    void onSetEllipseColorBtnClicked(); // 修改序列线条颜色
//    void onSetEllipsePenBtnClicked(); // 修改序列画笔颜色，不知道这个要干嘛emmmm
    void onSetEllipseLabColorBtnClicked(); // 设置序列标签颜色
    void onSetEllipseLabFontBtnClicked(); // 设置序列标签字体
    void onFormatYRadioBtnClicked(); // 设置序列标签的格式为ypoint
    void onFormatXYRadioBtnClicked(); // 设置序列标签的格式为(@xPoint,@yPoint)

    // 第三个工具栏
    void onaxisIsVisiableChecked(bool isChecked); // 设置坐标轴是否可见
    void onAxisXRadioBtnClicked(); // x轴radiobox被按下
    void onAxisYRadioBtnClicked(); // y轴radiobox被按下
    void onSetAxisRangeClicked(); // 设置坐标轴按钮
    void onIsTitleVisibleChecked(bool isChecked); // 坐标轴的标签可见
    void onSetAxisTitleBtnClicked(); // 设置坐标轴标题
    void onSetAxisFontBtnClicked(); // 设置坐标轴字体
    void onSetAxisLabColorBtnClicked(); // 设置坐标轴标签颜色
    void onSetAxisLabFormatClicked(); // 设置坐标轴标签格式
    void onSetAxisLabFontBtnClicked(); // 设置坐标轴标签字体
    void onIsLabelVisibleChecked(bool isChecked); // 设置坐标轴标签字体

    // 第四个工具栏
    void onIsGridLineVisibleChecked(bool isChecked); // 主刻度线是否可见
    void onSetGridLineColorBtnClicked(); // 设置主刻度线颜色
    void onSetGridLinePenBtnClicked();  // 设置主刻度线pen
    void onTickSpinBoxChanged(int value); // 主刻度线spinbox改变
    void onMinorTickSpinBoxChanged(int value); // 次刻度线spinbox改变
    void onSetMinorGridLineColorBtnClicked(); // 设置次刻度线颜色
    void onSetMinorGridLinePenBtnClicked(); // 设置次刻度线pen
    void onIsMinorGridLineVisibleChecked(bool isChecked); // 次刻度线是否可见
    void onIsLineVisibleChecked(bool isChecked); // 主刻度线是否可见
    void onSetLinePenColorBtnClicked(); // 设置主刻度线的color
    void onSetLinePenBtnClicked(); // 设置主刻度线的pen

private:
    QLineSeries* curSeries; // 当前序列
    QValueAxis* curAxis; // 当前坐标轴

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
